export {};


var log = console.log;

// Define a class using ES6 class syntax
class Person {

    constructor (name, age) {

        this.name = name;
        this.age = age;

    }

    // Define a method within the class
    sayHello () {

        log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);

    }

}

// Create an array of objects
const people = [
    new Person(
        "Alice",
        30
    ),
    new Person(
        "Bob",
        25
    ),
    new Person(
        "Charlie",
        35
    )
];

// Use the forEach method to iterate over the array
people.forEach((person) => {

    person.sayHello();

});

// Use a template literal to create a multiline string
const multilineString = `
  This is a multiline string
  that spans multiple lines.
`;

// Use destructuring assignment to extract values from an object
const {name, age} = people[0];
log(
    `First person in the array is ${name} and they are ${age} years old.`,
    multilineString
);

// Use the spread operator to create a new array
const numbers = [
    1,
    2,
    3
];
const newNumbers = [
    ...numbers,
    4,
    5
];
log(newNumbers);

// Use a try-catch block for error handling
try {

    // Attempt to parse an invalid JSON string
    JSON.parse("invalid JSON");

} catch (error) {

    console.error(
        "Error parsing JSON:",
        error.message
    );

}

// Use a ternary conditional operator
const isEven = (num) => num % 2 === 0;
const number = 7;
log(`${number} is ${isEven(number)
    ? "even"
    : "odd"}.`);

// Use a callback function with setTimeout for asynchronous code
setTimeout(
    () => {

        log("This code runs after a delay of 2 seconds.");

    },
    2000
);

let a, b, c, d, foo;

if (a ||
  b ||
  c || d
) {

    foo();

}

// Array with template literals
const arr = [
    "foo",
    "bar",
    "baz",
    `multiple-line
      
    `,
    "string"
];
console.log(arr);